package bio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * 客户端
 */
public class SocketClient {
    public static void main(String[] args) {
        /**
         * PrintWriter out：用于向服务器发送数据（自动刷新模式）
         * BufferedReader in：用于读取服务器响应
         * BufferedReader stdIn：用于读取用户键盘输入
         */
        try (Socket socket = new Socket("localhost", 8080);
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(
                     new InputStreamReader(socket.getInputStream()));
             BufferedReader stdIn = new BufferedReader(
                     new InputStreamReader(System.in))) {

            String userInput;
            /**
             * 读取用户输入：
             * stdIn.readLine() 从键盘读取一行文本（阻塞直到用户输入并按 Enter）。
             * 发送数据到服务器：
             * out.println(userInput) 将文本发送给服务器（自动添加换行符）。
             * 接收服务器响应：
             * in.readLine() 读取服务器返回的一行数据（阻塞直到服务器发送并包含换行符）。
             * 循环条件：
             * 当用户输入 EOF（如 Ctrl+D）时，stdIn.readLine() 返回null，循环结束。
             */
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                System.out.println("服务器返回: " + in.readLine());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
